// 数据验证中间件文件
// 该文件包含了各种数据验证函数

const { validationResult, body } = require('express-validator');
const { error } = require('./responseHandler');

// 导入各个schema验证规则
const { addCustomerSchema, updateCustomerSchema } = require('../schema/customers');
const { addProductSchema, updateProductSchema } = require('../schema/products');
const { addSalesOrderSchema, updateSalesOrderSchema } = require('../schema/salesOrders');
const { addSupplierSchema, updateSupplierSchema } = require('../schema/suppliers');
const { registerSchema, loginSchema } = require('../schema/user');
const { updateUserInfoSchema } = require('../schema/userinfo');
const { addDeliveryOrderSchema, updateDeliveryOrderSchema } = require('../schema/deliveryOrders');
const { addCourierCompanySchema, updateCourierCompanySchema } = require('../schema/courierCompanies');

/**
 * 验证快递信息数据
 */
const validateExpressInfo = [
  // 验证快递公司名称
  body('express_company')
    .optional({ nullable: true })
    .isLength({ max: 100 })
    .withMessage('快递公司名称长度不能超过100个字符'),
  
  // 验证快递单号
  body('express_number')
    .optional({ nullable: true })
    .isLength({ max: 100 })
    .withMessage('快递单号长度不能超过100个字符'),
  
  // 验证处理函数
  (req, res, next) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return error(res, errors.array(), '数据验证失败');
    }
    next();
  }
];

// 统一错误处理函数
const handleValidationErrors = (req, res, next) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return error(res, errors.array(), '数据验证失败');
  }
  next();
};

// 导出验证函数
module.exports = {
  validateExpressInfo,
  handleValidationErrors,
  // 客户验证规则
  addCustomerSchema,
  updateCustomerSchema,
  // 产品验证规则
  addProductSchema,
  updateProductSchema,
  // 销售订单验证规则
  addSalesOrderSchema,
  updateSalesOrderSchema,
  // 供应商验证规则
  addSupplierSchema,
  updateSupplierSchema,
  // 用户验证规则
  registerSchema,
  loginSchema,
  updateUserInfoSchema,
  // 发货单验证规则
  addDeliveryOrderSchema,
  updateDeliveryOrderSchema,
  // 快递公司验证规则
  addCourierCompanySchema,
  updateCourierCompanySchema
};